package com.chentf.feginclient;

import com.chentf.entity.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author chentengfei
 * @desc ...
 * @date 2021-09-19 20:08:55
 */
@FeignClient(value = "PRODUCT") //value:用来书写调用服务的服务的id
public interface ProductClient {

    //声明调用商品服务根据类别id查询分页查询商品信息 以及总条数
    @GetMapping("/productList")
    String findByCategoryIdAndPage(@RequestParam("page") Integer page,@RequestParam("rows") Integer rows,@RequestParam("categoryId") Integer categoryId);

    ///声明调用商品服务根据类别id查询一组商品信息
    @GetMapping("/products")
    List<Product> findByCategoryId(@RequestParam("categoryId") Integer categoryId);

    //声明调用根据id查询商品信息接口
    @GetMapping("/product/{id}")
    public Product test05(@PathVariable("id") Integer id);

    /****
     首先明确一点，SpringCloud通过Fegin如果是多个参数，其中一个参数是List，那么是传不过去的，单个List是可以的。
        1、单个List实体传递
        2、基本类型传递
            基本类型可以通过数组的方式传递
        3、实体类型传递
            实体类型可以通过FastJson将List转换为String之后进行传递
     声明调用商品服务中test4接口 传递一个list集合类型参数 test4?ids=21&ids=22
     */
    @GetMapping("/test04")
    String test04(@RequestParam("ids") String[] ids);

    //声明调用商品服务中test03接口,传递一个数组类型queryString /test03?id=21&ids=22&ids=23
    @GetMapping("/test03")
    public String test03(@RequestParam("ids") String[] ids);

    //声明调用商品服务中test02接口,传递一个对象
    @PostMapping("/test02")
    public String test02(@RequestBody Product product);

    //声明调用商品服务的teset01接口,路径传递参数
    @GetMapping("/test01/{id}/{name}")
    public String test01(@PathVariable("id") String id,@PathVariable("name") String name);

    //声明调用商品服务中接口test?name=xxx&age=23,传递name,age
    @GetMapping("/test")
    public String test(@RequestParam("name") String name, @RequestParam("age") Integer age);

    //调用商品服务
    @GetMapping("/product")
    public String product();


}
